python 中的mixin特性

python支持多继承后,但能否支持动态继承性质?在程序运行过程中,重定义类的继承,python是支持这种动态继承性质的。这也就是python中 的mixin,在定义类过程中改变类的继承顺序,继承类。当某个模块不能修改时,通过mixin方式可以动态添加该类的方法,动态改变类的原有继承体系。
弄懂了多继承,mixin特性就简单多了。 但需要注意mixin后的具体继承体系的改变。

  1. #!/usr/bin/env
    python

  2. import types

  3. def MixIn(pyClass,mixInClass,makeAncestor=0):

  4. if makeAncestor:

  5. pyClass.bases = (mixInClass,) + pyClass.bases

  6. elif mixInClass not in pyClass.bases:

  7. pyClass.bases = pyClass.bases + (mixInClass,)

  8. else:

  9. pass

  10. class C1(object):

  11. def test(self):

  12. print ‘test in C1’

  13. class C0MixIn(object):

  14. def test(self):

  15. print ‘test in C0MixIn’

  16. class C2(C1,C0MixIn):

  17. def test(self):

  18. print ‘test in C2’

  19. class C0(C1):

  20. pass

  21. if name == “main“:

  22. print C0.mro

  23. c1 = C0()

  24. c1.test()

  25. MixIn(C0,C0MixIn,1)

  26. c0 = C0()

  27. c0.test()

  28. print C0.mro

  29. print C2.mro

  30. MixIn(C2,C0MixIn)

  31. print C2.mro

运行结果如下: python mixin2.py点击(此处)折叠或打开

  1. (, , )

  2. test in C1

  3. test in C0MixIn

  4. (, , , )

  5. (, , , )

  6. (, , , )

参考资料很详细的MixIn介绍:http://www.linuxjournal.com/node/4540/print

Contents
,